home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_12_04 / ross / decomp.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-02-09  |  784 b   |  45 lines

  1.  
  2. Figure 4
  3. --------
  4.  
  5. A function to decompress a data record compressed with Huffman encoding.
  6.  
  7.  
  8. #include <stdio.h>
  9. #include "hufftree.h"
  10.  
  11. /*
  12.    --------------------------------- decode -----------------------------
  13. */
  14.  
  15. void decode(char *bufin, int *outlen, char *bufout)
  16. { short h;
  17.   int obit;
  18.   int nin = 0, nout = 0;
  19.   int byt, cnt = 8;
  20.   unsigned char size;
  21.  
  22.   size = (unsigned char)bufin[nin++];
  23.   while (nout < size)
  24.   { h = root;
  25.     while (ht[h].right != NULL)
  26.     { if (cnt == 8)
  27.       { byt = bufin[nin];
  28.         nin++;
  29.         cnt = 0;
  30.       }
  31.       obit = byt & 0x80;
  32.       byt <<= 1;
  33.       cnt++;
  34.       if (obit)
  35.         h = ht[h].left;
  36.       else
  37.         h = ht[h].right;
  38.     }
  39.     bufout[nout++] = h;
  40.   }
  41.   *outlen = nout;
  42. }
  43.  
  44.  
  45.